TCP 為連線導向的傳輸協定,因此雙方正式傳輸資料前,必須先經過三向交握(Three Way Handshake)這個階段,達成連線協議。
整個流程如果用圖表示的話就是這樣:
一開始 clinet 送了一個同步封包(SYN1)給 server ,請求進行連線。送出的資訊中,最重要的有以下幾個(TCP 封包都有這幾個資訊):
以下為 flags 全部 6 個位元(bit)的內容,請注意被上了紅色的 Synchronize 以及 Acknowledge 這兩個 bit ,Synchronize 用來告知這個封包是送出 SYN 資訊,而 Acknowledge 則是用來告知這個封包是送出 ACK 資訊:
當 server 接到從 client 而來的 SYN1 封包後,它就會回傳包括以下資訊的封包(SYN2+ACK1):
第三階段,client 收到了上面的封包後,就會回傳包括以下資訊的封包(ACK2):
經過上述三個步驟後,「建立連線」階段結束,雙方就會開始傳輸資料。第一以及第二步驟如果遺失的話,整個步驟就必須重新來過。
結合前一篇以及這篇文章,想必你對於 TCP 做了什麼事情有更深的了解了吧?我們只講了 TCP 裡面兩個重要的概念而已,因此或許你還是會有些疑惑,不過這不是重點,之所以介紹這兩個東西,是要讓各位感受一下 TCP 傳輸過程經過了多少步驟、背後做了多少事,使各位擁有更確實的概念。
看不懂什麼叫做很慢??
一般寫網頁,寫Web都不是TCP在慢
都是自己的Code,自己的架構在慢
TCP慢你也沒辦法,除非你有辦法寫網路層,傳輸層,數據連接層,實體層的架構
所謂的慢要有依據
如果你跟UDP比較的話
TCP相對的是慢
TCP 跟 UDP 在 Transport Layer 下四層是一樣快的
取決你的傳輸通道跟媒介
網路業者給你20M就是20M
TCP 跟 UDP 在OSI 上面三層就差很多
TCP 會有重傳,同步,偵錯…行為
所以你的資料加Protocol meta 資料,還有一些協定封包...會多站很多頻寬
UDP看似很快,但使用上可不一定.因為他功能很少,所以你一些機制要寫在Session 之上去確認資料可用性,還有怎麼對話…
你寫得不好,寫得比TCP複雜...應用上可能會比TCP慢